home *** CD-ROM | disk | FTP | other *** search
/ BUG 1 / BUGCD1996_0708.ISO / pc / util / minilin / minilin.exe / SBIN / REMOVEPK.{_6 < prev    next >
Text File  |  1994-05-22  |  4KB  |  131 lines

  1. #!/bin/sh
  2. #
  3. # Copyright 1994 Patrick Volkerding, Moorhead, Minnesota USA
  4. # All rights reserved.
  5. #
  6. # Redistribution and use of this script, with or without modification, is 
  7. # permitted provided that the following conditions are met:
  8. #
  9. # 1. Redistributions of this script must retain the above copyright
  10. #    notice, this list of conditions and the following disclaimer.
  11. #
  12. #  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
  13. #  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
  14. #  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
  15. #  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
  16. #  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  17. #  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  18. #  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
  19. #  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
  20. #  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  21. #  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  22. #
  23.  
  24. TARGET_DIR=/
  25. TMP=/tmp
  26. ADM_DIR=$TARGET_DIR/var/adm
  27.  
  28. keep_files() {
  29.  while read FILE ; do
  30.   if [ -r "$TARGET_DIR/$FILE" -a ! -d "$TARGET_DIR/$FILE" ]; then
  31.     echo "  --> $FILE was found in another package. Skipping."
  32.   fi
  33.  done
  34. }
  35.  
  36. keep_links() {
  37.  while read LINK ; do
  38.   echo "Duplicate link. Not executing: $LINK"
  39.  done
  40. }
  41.  
  42. delete_files() {
  43.  while read FILE ; do
  44.   if [ -r "$TARGET_DIR/$FILE" -a ! -d "$TARGET_DIR/$FILE" ]; then
  45.     if [ ! "$WARN" = "true" ]; then
  46.      echo "  --> Deleting $FILE"
  47.      rm -f $TARGET_DIR/$FILE
  48.     else
  49.      echo "  --> $FILE would be deleted"
  50.     fi
  51.   fi
  52.  done
  53. }
  54.  
  55. delete_links() {
  56.  while read LINK ; do
  57.   echo "Unique link. Would execute: $LINK"
  58.  done
  59. }
  60.  
  61. # Conversion to 'comm' utility by Mark Wisdom.
  62. # is pretty nifty! :^)
  63. remove_packages() {
  64.  for package_name in $1 
  65.  do
  66.   echo
  67.   if [ -r $ADM_DIR/packages/$package_name ]; then
  68.    if [ ! "$WARN" = true ]; then
  69.     echo "Removing package $package_name..."
  70.    fi
  71.    if fgrep "./" $ADM_DIR/packages/$package_name 1> /dev/null 2>&1; then
  72.     TRIGGER=".\/"
  73.    else
  74.     TRIGGER="FILE LIST:"
  75.    fi
  76.    if [ ! "$WARN" = true ]; then
  77.     echo "Removing files:"
  78.    fi
  79.    sed -n "/$TRIGGER/,/^$/p" < $ADM_DIR/packages/$package_name | sort -u > $TMP/delete_list
  80.    # Pat's new-new && improved pre-removal routine.
  81.    for DIR in $ADM_DIR/removed_packages $ADM_DIR/removed_scripts ; do
  82.     if [ ! -d $DIR ] ; then mkdir -p $DIR ; chmod 755 $DIR ; fi
  83.    done
  84.    if [ "$WARN" = "true" ]; then
  85.     mv $ADM_DIR/packages/$package_name $TMP/$package_name 1> /dev/null 2>&1
  86.    else
  87.     mv $ADM_DIR/packages/$package_name $ADM_DIR/removed_packages 1> /dev/null 2>&1
  88.    fi
  89.    if [ -r $ADM_DIR/scripts/$package_name ]; then
  90.     cat $ADM_DIR/scripts/$package_name | fgrep 'rm -rf' | sort -u > $TMP/del_link_list
  91.     if [ "$WARN" = "true" ]; then
  92.      mv $ADM_DIR/scripts/$package_name $TMP/$package_name.script
  93.     else
  94.      mv $ADM_DIR/scripts/$package_name $ADM_DIR/removed_scripts 1> /dev/null 2>&1
  95.     fi
  96.     cat $ADM_DIR/scripts/* | fgrep 'rm -rf' | sort -u > $TMP/required_links
  97.     comm -12 $TMP/del_link_list $TMP/required_links | keep_links
  98.     comm -23 $TMP/del_link_list $TMP/required_links | delete_links
  99.     comm -23 $TMP/del_link_list $TMP/required_links > $TMP/delscript
  100.     if [ ! "$WARN" = "true" ]; then
  101.      ( cd $TARGET_DIR ; sh $TMP/delscript )
  102.     fi
  103.     rm -f $TMP/del_link_list $TMP/required_links $TMP/delscript
  104.    fi
  105.    cat $ADM_DIR/packages/* | sort -u > $TMP/required_files
  106.    comm -12 $TMP/delete_list $TMP/required_files | keep_files
  107.    comm -23 $TMP/delete_list $TMP/required_files | delete_files
  108.    rm -f $TMP/delete_list $TMP/required_files
  109.    if [ "$WARN" = "true" ]; then
  110.     mv $TMP/$package_name $ADM_DIR/packages/$package_name
  111.     if [ -r $TMP/$package_name.script ]; then
  112.      mv $TMP/$package_name.script $ADM_DIR/scripts/$package_name
  113.     fi
  114.    fi
  115.   else
  116.    echo "No such package: $package_name. Can't remove."
  117.   fi
  118.  done
  119. }
  120.  
  121. if [ "$1" = "-warn" ]; then
  122.  echo "Only warning... not actually removing any files."
  123.  echo "Here's what would be removed (and left behind) if you"
  124.  echo "removed the package(s):"
  125.  echo
  126.  WARN=true
  127.  shift 1
  128. fi
  129.  
  130. remove_packages $*
  131.